import { applyMiddleware, compose, createStore, combineReducers } from 'redux';
import thunkMiddleware from 'redux-thunk';
import reducers from './reducer';

// store 是一个单一对象：
// 管理应用的 state
// 通过 store.getState() 可以获取 state
// 通过 store.dispatch(action) 来触发 state 更新
// 通过 store.subscribe(listener) 来注册 state 变化监听器
// 通过 createStore(reducer, [initialState]) 创建

// 用combineReducers合并的reducer，经过redux运行之后，state会按照每个reducer的key进行给值,
// initialState被改了，因为redux帮你运行了一次
// 这个时候的state是一个对象，每个key就是你的combineReducer的key的
// 所以初始化state直接设置成如下即可
// 即命名空间，组件取值，按照命名空间取就可以了

// 初始state可以在 createStore 方法给，也可以在 reducer 给
const initialState = {
  counterReducer: {
    age: 18,
    name: '小月',
  },
};

export default function configureStore(preloadedState = initialState) {
  const store = createStore(
    // 使用 combineReducers 来把多个 reducer 创建成一个根 reducer。
    // init action 后会挂在到对应的命名空间下
    // counterReducer => state.counterReducer
    // testReducer => state.testReducer
    combineReducers(reducers),
    preloadedState,
    applyMiddleware(thunkMiddleware)
  );

  return store;
}
